/**
 * 工具函数模块
 * 提供通用的工具函数
 * @module CesiumExtensions/util
 */

/**
 * 坐标工具类
 * @class
 */
export class CoordinateUtil {
  /**
   * 格式化经纬度坐标
   * @param {number} value - 坐标值
   * @param {number} precision - 精度位数
   * @returns {string} 格式化后的坐标字符串
   */
  static formatCoordinate(value, precision = 6) {
    return value.toFixed(precision);
  }

  /**
   * 计算两点之间的距离（米）
   * @param {Object} point1 - 第一个点 {x, y, z}
   * @param {Object} point2 - 第二个点 {x, y, z}
   * @returns {number} 距离（米）
   */
  static calculateDistance(point1, point2) {
    const dx = point2.x - point1.x;
    const dy = point2.y - point1.y;
    const dz = (point2.z || 0) - (point1.z || 0);
    return Math.sqrt(dx * dx + dy * dy + dz * dz);
  }
}

/**
 * 日期时间工具类
 * @class
 */
export class DateUtil {
  /**
   * 格式化时间
   * @param {Date|number} date - 日期对象或时间戳
   * @param {string} format - 格式化模板
   * @returns {string} 格式化后的时间字符串
   */
  static format(date, format = 'YYYY-MM-DD HH:mm:ss') {
    const d = new Date(date);
    const year = d.getFullYear();
    const month = String(d.getMonth() + 1).padStart(2, '0');
    const day = String(d.getDate()).padStart(2, '0');
    const hours = String(d.getHours()).padStart(2, '0');
    const minutes = String(d.getMinutes()).padStart(2, '0');
    const seconds = String(d.getSeconds()).padStart(2, '0');
    
    return format
      .replace('YYYY', year)
      .replace('MM', month)
      .replace('DD', day)
      .replace('HH', hours)
      .replace('mm', minutes)
      .replace('ss', seconds);
  }
}

/**
 * DOM工具类
 * @class
 */
export class DomUtil {
  /**
   * 创建DOM元素
   * @param {string} tagName - 标签名
   * @param {Object} [attributes] - 属性对象
   * @param {HTMLElement} [container] - 容器元素
   * @returns {HTMLElement} 创建的DOM元素
   */
  static createElement(tagName, attributes = {}, container = null) {
    const element = document.createElement(tagName);
    
    // 设置属性
    for (const [key, value] of Object.entries(attributes)) {
      if (key === 'className') {
        element.className = value;
      } else if (key === 'style' && typeof value === 'object') {
        Object.assign(element.style, value);
      } else {
        element.setAttribute(key, value);
      }
    }
    
    // 添加到容器
    if (container) {
      container.appendChild(element);
    }
    
    return element;
  }
}

// 导出工具模块
export default {
  CoordinateUtil,
  DateUtil,
  DomUtil
};